package com.yy.main.app.mapper;

import com.yy.pojo.base.TPermission;
import com.yy.pojo.base.TPermissionExample;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;

@Repository
@Resource(name = "dataSource")
public interface TPermissionMapper {
    long countByExample(TPermissionExample example);

    int deleteByExample(TPermissionExample example);

    int deleteByPrimaryKey(String id);

    int insert(TPermission record);

    int insertSelective(TPermission record);

    List<TPermission> selectByExample(TPermissionExample example);

    TPermission selectByPrimaryKey(String id);

    int updateByExampleSelective(@Param("record") TPermission record, @Param("example") TPermissionExample example);

    int updateByExample(@Param("record") TPermission record, @Param("example") TPermissionExample example);

    int updateByPrimaryKeySelective(TPermission record);

    int updateByPrimaryKey(TPermission record);


    /**
     * <p>
     * 获得用户所拥有的权限
     * </p>
     *
     * @param userid 用户id
     * @return {@link List}<Permission>
     */
    List<TPermission> getUserPermissions(@Param("userid") String userid);

    /**
     * <p>
     * 获得用户所拥有权限的认证码
     * </p>
     *
     * @param userid 用户id
     * @return {@link List}<java.lang.String>
     */
    List<String> getUserPerAuthentication(@Param("userid") String userid);

    /**
     * <p>
     * 获得后台管理的权限树
     * </p>
     *
     * @param id     权限id
     * @param userid 用户id
     * @return {@link List}<Permission>
     */
    List<TPermission> getUserPersManageTree(@Param("id") String id, @Param("userid") String userid);

    /**
     * <p>
     * 获取权限树，根据角色ID，默认勾选上角色已经拥有的权限
     * </p>
     *
     * @param id     权限节点id
     * @param roleid 角色ID
     * @return {@link List}<Permission>
     * @author 杨阳
     * @since 2017年9月13日
     */
    List<TPermission> roleAlreadyHavePermissions(@Param("id") String id, @Param("roleid") String roleid);

    /**
     * <p>
     * 根据角色id获得角色关联的权限
     * </p>
     *
     * @param roleid 角色id
     * @return {@link List}<Permission>
     * @author 杨阳
     * @since 2017年9月14日
     */
    List<TPermission> getPermissionsByRoleId(@Param("roleid") String roleid);
}